package com.stu.day10.SOLID;

/**
 * 依赖倒置原则的核心是：高层模块不应该依赖低层模块，二者都应该依赖于抽象。
 * @author zy
 * @date 2025/2/1 18:46
 */
/*
  UserService类不再直接依赖于Database类，而是依赖于UserRepository接口。
  Database类作为UserRepository的一个具体实现提供给UserService。
  这种做法允许我们将具体实现类（如Database）与高层模块（UserService）解耦，
  使得UserService与具体的存储方式无关，只关心如何保存用户。
 */
// 创建一个存储用户的接口（抽象）
interface UserRepository {
    void saveUser(User user);
}

// 低层模块：数据库存储实现
class Database2 implements UserRepository {
    @Override
    public void saveUser(User user) {
        System.out.println("User saved to database.");
    }
}

// 高层模块：UserService依赖于UserRepository接口，而不是具体实现
class UserService2 {
    private UserRepository userRepository;

    public UserService2(UserRepository userRepository) {
        this.userRepository = userRepository; // 依赖注入，依赖于抽象接口
    }

    public void saveUser(User user) {
        userRepository.saveUser(user);
    }
}
